import ColorUISdk from '../../mp-sdk/index'
const QQMapWX = require('../../libs/qqmap-wx-jssdk.js');

const sdk = new ColorUISdk({
  env: 'dev',
  version: '1.0.0',
  api: {
    dev: { 
      url:'http://192.168.134.31:5000'
    }
  }
})

// 初始化腾讯位置服务SDK
const qqmapsdk = new QQMapWX({
  key: 'OVABZ-4RSC4-GHOUA-FH2VR-LY5SZ-F2B4E' 
});

Page({
  data: {
    typeOptions: [
      '建筑损坏', 
      '需维修保养', 
      '历史文化线索', 
      '其他',
      '结构破损',
      '装饰损坏',
      '设施故障',
      '环境问题'
    ],
    typeIndex: 0,
    buildingName: '',
    description: '',
    images: [] as string[],
    phone: '',
    location: null as {latitude: number, longitude: number} | null,
    locationAddress: '',
    userInfo: null,  // 存储完整用户信息
    userId: ''       // 存储用户ID
  },

  onLoad() {
    // 页面加载时先获取用户信息，确保userId存在
    this.loadUserInfo();
    // 再获取定位
    this.getLocation();
  },

  // 新增：加载并验证用户信息（核心修复部分）
  loadUserInfo() {
    try {
      const userInfo = wx.getStorageSync('userInfo');
      // 检查userInfo是否存在且包含user_id（根据实际返回字段调整）
      if (!userInfo || !userInfo.user_id) {  // 注意这里是user_id而非userId
        wx.showToast({
          title: '请先登录',
          icon: 'none'
        });
        // 跳转至登录页，登录后可返回当前页
        setTimeout(() => {
          wx.navigateTo({
            url: '/pages/login/login'
          });
        }, 1500);
      } else {
        // 将用户信息存入页面数据，注意字段映射关系
        this.setData({
          userInfo: userInfo,
          userId: userInfo.user_id  // 关键修复：使用user_id赋值给userId
        });
      }
    } catch (e) {
      console.error('获取用户信息失败:', e);
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      });
    }
  },

  onTypeChange(e: any) {
    this.setData({
      typeIndex: e.detail.value
    })
  },

  onBuildingNameChange(e: any) {
    this.setData({
      buildingName: e.detail.value
    })
  },

  onDescriptionChange(e: any) {
    this.setData({
      description: e.detail.value
    })
  },

  onPhoneChange(e: any) {
    this.setData({
      phone: e.detail.value
    })
  },

  // 获取GPS定位并使用腾讯位置服务进行逆地理编码
  getLocation() {
    wx.showLoading({ title: '获取位置中...' })
    
    // 1. 获取经纬度（使用微信原生接口）
    wx.getLocation({
      type: 'gcj02', // 腾讯位置服务使用gcj02坐标系
      success: (res) => {
        const { latitude, longitude } = res
        this.setData({
          location: { latitude, longitude }
        })
        
        // 2. 调用腾讯SDK进行逆地址解析（经纬度转具体地址）
        qqmapsdk.reverseGeocoder({
          location: {
            latitude,
            longitude
          },
          success: (addrRes: any) => {
            this.setData({
              locationAddress: addrRes.result.address || '获取地址成功'
            })
          },
          fail: (err: any) => {
            console.error('地址解析失败:', err)
            this.setData({
              locationAddress: '地址解析失败'
            })
          },
          complete: () => {
            wx.hideLoading()
          }
        })
      },
      fail: (err) => {
        console.error('获取定位失败:', err)
        wx.hideLoading()
        wx.showModal({
          title: '定位失败',
          content: '请允许获取位置信息，以便更好地提交线索',
          success: (modalRes) => {
            if (modalRes.confirm) {
              wx.openSetting()
            }
          }
        })
      }
    })
  },

  // 选择图片
  chooseImage() {
    const { images } = this.data
    
    if (images.length >= 5) {
      wx.showToast({
        title: '最多上传5张图片',
        icon: 'none'
      })
      return
    }
    
    wx.chooseImage({
      count: 5 - images.length,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        this.setData({
          images: [...images, ...res.tempFilePaths]
        })
      }
    })
  },

  // 删除图片
  deleteImage(e: any) {
    const { index } = e.currentTarget.dataset
    const { images } = this.data
    
    images.splice(index, 1)
    this.setData({
      images
    })
  },

  // 上传图片到服务器
  async uploadImages(tempFilePaths: string[]) {
    const uploadPromises = tempFilePaths.map(path => {
      return new Promise((resolve, reject) => {
        wx.uploadFile({
          url: 'http://192.168.134.31:5000/api/upload', 
          filePath: path,
          name: 'file',
          header: {
            'Authorization': `Bearer ${wx.getStorageSync('token')}`
          },
          success: (res) => {
            const data = JSON.parse(res.data)
            if (data.code === 0) {
              resolve(data.data.url)
            } else {
              reject(data.msg)
            }
          },
          fail: (err) => {
            reject(err)
          }
        })
      })
    })
    
    return Promise.all(uploadPromises)
  },

  // 提交反馈
  async submitFeedback() {
    const { 
      typeIndex, 
      typeOptions, 
      buildingName, 
      description, 
      images, 
      phone,
      location,
      locationAddress,
      userId  // 从data中获取userId
    } = this.data
    
    // 验证必填项
    if (!userId) {  // 验证userId是否存在
      wx.showToast({
        title: '用户信息获取失败，请重新登录',
        icon: 'none'
      })
      return
    }
    
    if (!buildingName || !description) {
      wx.showToast({
        title: '请填写建筑名称和线索描述',
        icon: 'none'
      })
      return
    }
    
    if (!location) {
      wx.showToast({
        title: '请允许获取位置信息',
        icon: 'none'
      })
      return
    }
    
    try {
      wx.showLoading({ title: '提交中...' })
      
      // 上传图片
      let imageUrls: string[] = []
      if (images.length > 0) {
        imageUrls = await this.uploadImages(images) as string[]
      }
      
      // 提交反馈
      const res = await sdk.request({
        url: '/api/feedback/submit',
        method: 'POST',
        header: {
          'Authorization': `Bearer ${wx.getStorageSync('token') || ''}`
        },
        data: {
          type: typeOptions[typeIndex],
          buildingName,
          description,
          images: imageUrls,
          phone,
          userId: userId,  // 使用正确获取的userId
          location: {
            latitude: location.latitude,
            longitude: location.longitude,
            address: locationAddress
          },
          status: '审核中'
        }
      })
      
      wx.hideLoading()
      
      if (res.code === 0) {
        wx.showToast({
          title: '提交成功，感谢您的反馈',
          icon: 'success'
        })
        
        setTimeout(() => {
          wx.navigateBack()
        }, 1500)
      } else {
        wx.showToast({
          title: res.msg || '提交失败',
          icon: 'none'
        })
      }
    } catch (error) {
      wx.hideLoading()
      wx.showToast({
        title: '网络错误',
        icon: 'none'
      })
    }
  }
})
